#include<iostream>
#include<cmath>
using namespace std;
using ll = long long;
const int N = 1e4 + 10;
int p[N], cnt;
int n;
bool st[N];
int c[N];

void get_prime()
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i]) p[++cnt] = i; 
        for (ll j = 1; p[j] * i <= n && cnt >= j; j++)
        {
            st[p[j] * i] = true;
            if (i % p[j] == 0) break;
        }
    }
}

void solve(int x)
{
    // 其实现在就是只需要枚举到 sqrt(x)现在就是需要对这样的方法才可以直接完成
    for (int i = 2; i <= x / i; i++)
    {
        int cnt = 0;
        while (x % i == 0) 
        {
            x /= i;
            cnt++;
        }
        c[i] += cnt;
    }
    if (x > 1) c[x]++; 
}
int main()
{
    cin >> n;
    for (int i = 2; i <= n; i++)
    solve(i);

    // cout << "hello " << endl;
    for (int i = 2; i <= n; i++)
    {
        if (c[i]) cout << i << " " << c[i] << endl;
    }
    return 0;
}

// 现在的这样的题目要求是不能满足第二大岛题目的要求的，而可能是测试数据较少的原因！@
